package com.example.itcacp.dto.response;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * wangEditor统一响应结果类
 */


@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseResult<T> {

    private int errno; // 错误码，0表示成功，非0表示失败
    private String message; // 错误信息
    private T data; // 成功时返回的数据

    // 成功响应的构造方法
    public ResponseResult(int errno, T data) {
        this.errno = errno;
        this.data = data;
    }

    // 失败响应的构造方法
    public ResponseResult(int errno, String message) {
        this.errno = errno;
        this.message = message;
    }

    // 快速创建成功响应
    public static <T> ResponseResult<T> success(T data) {
        return new ResponseResult<>(0, data);
    }

    // 快速创建失败响应
    public static <T> ResponseResult<T> fail(int errno, String message) {
        return new ResponseResult<>(errno, message);
    }

    // 图片上传成功时使用的特定响应格式
    public static ResponseResult<ImageUploadData> imageUploadSuccess(String url, String alt, String href) {
        ImageUploadData data = new ImageUploadData(url, alt, href);
        return new ResponseResult<>(0, data);
    }

    // 图片上传失败时使用的特定响应格式
    public static ResponseResult<ImageUploadData> imageUploadFail(String message) {
        return new ResponseResult<>(1, message);
    }

    // 图片上传数据的内部类
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class ImageUploadData {
        private String url; // 图片src，必须
        private String alt; // 图片描述文字，非必须
        private String href; // 图片的链接，非必须

        // 常用构造方法（只包含必须的url）
        public ImageUploadData(String url) {
            this.url = url;
        }
    }
}
